package com.ohs.ohsoa.system.service;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.stereotype.Service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.ohs.ohsoa.system.dto.RoleDto;
import com.ohs.ohsoa.system.entity.GroupEnterprise;
import com.ohs.ohsoa.system.entity.Role;
import com.ohs.ohsoa.system.mapper.RoleMapper;
import com.ohs.ohsoa.system.vo.RoleVo;
import com.ohs.ohsoa.utils.IsNull;
import com.ohs.ohsoa.utils.bean.requestBean.PageParam;
import com.ohs.ohsoa.utils.exception.BizException;

/**
 * 角色serviceImpl
 *
 * @author ccj
 * @since  2021年10月11日
 */
@Service
public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements RoleService{

    @Autowired
    private RoleMapper roleMapper;

    @Resource
    private MessageSource messageSource;

    /**
     * 分页查询
     *
     * @param pageParam 检索用参数
     * @return roleVos 查询结果
     * @author ccj
     * @since  2021年9月24日
     */
    @Override
    public List<RoleVo> selectListRole(PageParam<RoleDto> pageParam){
        // 获取role对象
        RoleDto roleDto = pageParam.getSearchbean();
        // 分页
        PageHelper.startPage(pageParam.getIndexPage(), pageParam.getPageSize());
        return roleMapper.selectListROle(roleDto);
    }

    /**
     * 新增角色
     *
     * @return boolean 是否重复
     * @author ccj
     * @since  2021年9月24日
     * @param role 检索用参数
     */
    @Override
    public Boolean insertRole(Role role) {
        //判断角色是否重复
        this.roleRepeat(role);
        role.setDeleteFlag("1");
        return this.save(role);
    }

    /**
     * 修改角色
     *
     * @return boolean 修改结果
     * @author ccj
     * @since  2021年9月24日
     * @param role 角色信息
     */
    @Override
    public Boolean updateRole(Role role){
        this.roleRepeat(role);
        return this.updateById(role);
    }

    private void roleRepeat(Role role) {
        QueryWrapper<Role> queryWrapper = new QueryWrapper<>();
        queryWrapper.ne(IsNull.isNotNull(role.getRoleGuid()),"role_guid",role.getRoleGuid())
                .eq("role_name",role.getRoleName())
                .eq("delete_flag","1");
        if(this.count(queryWrapper) > 0){
                throw new BizException("E0003", messageSource.getMessage("E0003",new String[] {"役職名称","役職名称"}, null)) ;
        }
    }

    /**
     * 批量删除角色
     *
     * @return roleVos  角色
     * @author ccj
     * @since  2021年9月24日
     */
    @Override
    public Boolean deleteRole(List<String> ids){
        return roleMapper.deleteRole(ids);
    }

    /**
     * 查询所有企业
     *
     * @return  所有企业信息
     * @author ccj
     * @since  2021年9月24日
     */
    @Override
    public List<GroupEnterprise> selectAllEnterprise() {
        return roleMapper.selectAllEnterprise();
    }



}
